#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
系统健康检查脚本 - Python版
作者：您的名字
功能：检查系统的基本健康状态
"""

import os
import subprocess
from datetime import datetime

def run_command(cmd):
    """运行系统命令并返回结果"""
    try:
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True, check=True)
        return result.stdout.strip()
    except subprocess.CalledProcessError as e:
        return f"命令执行失败: {e}"

def log_output(message, log_file=None):
    """同时打印到屏幕和日志文件"""
    print(message)
    if log_file:
       log_file.write(message + "\n")

def main():
    """主函数"""
    # 创建日志文件名（带时间戳）
    log_filename = f"system_health_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log"
    
    # 打开日志文件
    with open(log_filename, 'w', encoding='utf-8') as log_file:
        # 写入日志头信息
        log_output("=" * 50, log_file)
        log_output("        系统健康检查报告", log_file)
        log_output("=" * 50, log_file)
        log_output(f"检查时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}", log_file)
        log_output(f"日志文件: {log_filename}", log_file)
        log_output("", log_file)  # 空行
        
        # 1. 检查磁盘空间
        log_output("1. 磁盘空间使用情况:", log_file)
        log_output("-" * 30, log_file)
        disk_info = run_command("df -h | grep -E '(/dev/sda|/dev/vda|/$)'")
        log_output(disk_info, log_file)
        log_output("", log_file)
        
        # 2. 检查内存使用情况
        log_output("2. 内存使用情况:", log_file)
        log_output("-" * 30, log_file)
        memory_info = run_command("free -h")
        log_output(memory_info, log_file)
        log_output("", log_file)

        # 3. 检查系统负载
        log_output("3. 系统负载:", log_file)
        log_output("-" * 30, log_file)
        load_info = run_command("uptime")
        log_output(load_info, log_file)
        log_output("", log_file)

        # 4. 检查当前登录用户
        log_output("4. 当前登录用户:", log_file)
        log_output("-" * 30, log_file)
        users_info = run_command("who")
        log_output(users_info if users_info else "暂无用户登录", log_file)
        log_output("", log_file)
        
        # 5. 磁盘使用率预警
        log_output("5. 磁盘健康状态:", log_file)
        log_output("-" * 30, log_file)
        disk_warning = check_disk_usage(80)  # 80%阈值
        log_output(disk_warning, log_file)
        log_output("", log_file)
        
        log_output("=== 检查完成 ===", log_file)

    print(f"\n✅ 日志已保存到: {log_filename}")


def check_disk_usage(warning_threshold=80):
    """检查根分区磁盘使用率"""
    try:
        # 获取根分区使用率
        usage = run_command("df / | awk 'NR==2 {print $5}' | sed 's/%//'")
        usage_percent = int(usage)
        
        if usage_percent > warning_threshold:
            return f"⚠️  警告：根分区使用率 {usage_percent}% 超过阈值 {warning_threshold}%"
        else:
            return f"✅ 根分区使用率正常: {usage_percent}%"
    except ValueError:
        return "无法获取磁盘使用率"

if __name__ == "__main__":
    main()


    # 2.5 磁盘使用率预警
    print("5. 磁盘健康状态:")
    print("-" * 30)
    disk_warning = check_disk_usage(80)  # 80%阈值
    print(disk_warning)
    print()
